home *** CD-ROM | disk | FTP | other *** search
/ BMUG PD-ROM A / PD-ROM A.iso / Programming / Programming Languages / XLISP 2.0 / XLISP Tools / Utility (UL) / ITER.LSP < prev    next >
Encoding:
Lisp/Scheme  |  1988-04-07  |  997 b   |  35 lines  |  [TEXT/ttxt]

  1. ;; Larry Mulcahy 1988
  2. ;; iteration macros
  3.  
  4. (provide 'iteration)
  5.  
  6. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  7. ; macro for 
  8. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  9.  
  10. (defmacro for (var init max &rest body)
  11.   (let ((loop-label (gensym))
  12.         (result-label (gensym)))
  13.     `(prog (,var)
  14.        (setq ,var ,init)
  15.        ,loop-label
  16.        (setq ,result-label (progn ,@body))
  17.        (if (>= ,var ,max) (return ,result-label))
  18.        (setq ,var (1+ ,var))
  19.        (go ,loop-label))))
  20.  
  21. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  22. ; macro while 
  23. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  24.  
  25. (defmacro while (condition &rest body)
  26.   (let ((loop-label (gensym))
  27.         (result-label (gensym)))
  28.     `(prog nil
  29.        (setq ,result-label nil)
  30.        ,loop-label
  31.        (if ,condition
  32.            (setq ,result-label (progn ,@body))
  33.            (return ,result-label))
  34.        (go ,loop-label))))
  35.